﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Gma.QrCodeNet.Encoding;

namespace shiyan1
{
    class Program
    {
        static void Main(string[] args)
        {
            //用来检验args是否为空的变量
            bool isNull = true;
            //文本字符串长度
            int len = 0;
            //输入文本信息
            string qrText = null;

            //检验命令行参数是否为空
            foreach (String str in args)
            {
                //若非空，则isNull为false
                if(str != null){
                    isNull = false;
                }
            }

            //若命令行参数不为空，则根据命令行参数初始化文本信息变量
            if (isNull == false)
            {
                len = args[0].Length;
                qrText = args[0];
            }
            //若命令行参数为空，则提示重新输入并初始化文本信息变量
            else {
                Console.WriteLine("The text is null, please type in:");
                qrText = Console.ReadLine();
                len = qrText.Length;
            }

            //如果文本信息不符合长度要求，则重新输入
            while (len > 50)
            {
                Console.WriteLine("The text doesn't match the length, please type in again:");
                qrText = Console.ReadLine();
                len = qrText.Length;
            }

            Console.WriteLine();

            //改变背景颜色，使二维码能够被识别
            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;

            //实例化二维码生成库
            QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
            //生成二维码的实例
            QrCode qrCode = qrEncoder.Encode(qrText);

            //由矩阵输出二维码
            for (int j = 0; j < qrCode.Matrix.Width; j++)
            {
                for (int i = 0; i < qrCode.Matrix.Width; i++)
                {
                    //根据生成二维码在相应位置输出█或空格
                    char charToPrint = qrCode.Matrix[i, j] ? '█' : '　';
                    Console.Write(charToPrint);
                }
                Console.WriteLine();
            }

            //恢复背景颜色
            Console.ResetColor();

            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
